﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Sigecov.Models;
using Sigecov.Formularios;
namespace Sigecov.Formularios
{
    public partial class FrmPedido : Form
    {
        public FrmPedido()
        {
            InitializeComponent();
        }
        public Usuario _usuarioLogado;
        private static Cliente cliente;
        private Produto produto;
        public static string _valorPesquisa = "";
        public static string _codigoPesquisa = "";
        private static float _pesoTotalPedido, _precoKg, _totalFrete = 0;
        private static Dictionary<string, float> _transportadoras = new Dictionary<string, float>();
        
        private BindingSource _bindingSourse = new BindingSource();

        private void LimparPedido()
        {
            txtCodigo.Clear();
            txtCodigoCliente.Clear();
            txtDescricao.Clear();
            txtNomeCliente.Clear();
            txtQuantidade.Clear();
            txtValorUnitario.Clear();
            txtDesconto.Clear();
        }
        private void FrmPedido_Load(object sender, EventArgs e)
        {
            this.transportadorasTableAdapter.Fill(this.dsSigecov.Transportadoras);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult confirmar = MessageBox.Show("Deseja cancelar o pedido?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (confirmar.ToString().ToUpper() == "YES")
            {
                txtCodigoCliente.Focus();
                dgvPedido.Rows.Clear();
                this.LimparPedido();
            }
            else
                txtCodigoCliente.Focus();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (dgvPedido.RowCount > 0)
            {
            }
            else
            {
                MessageBox.Show("Nenhum produto foi adicionado na lista!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCodigoCliente.Focus();
            }
        }

        private void btnAdicionarProduto_Click(object sender, EventArgs e)
        {
            decimal _quantidade, _valorUnitario, _valorTotalItem, _desconto, _percentualDesconto = 0;
            if (!
                ((string.IsNullOrWhiteSpace(txtCodigo.Text))
                || (string.IsNullOrWhiteSpace(txtCodigoCliente.Text))
                || (string.IsNullOrWhiteSpace(txtQuantidade.Text))
                || (string.IsNullOrWhiteSpace(txtValorUnitario.Text))
                || (string.IsNullOrWhiteSpace(txtDescricao.Text))
                || (string.IsNullOrWhiteSpace(txtNomeCliente.Text))
                ))
            {
                Produto produtoSelecionado = new Produto();
                Cidade cidade = new Cidade();
                Estado estado = new Estado();
                using (SigecovContext DB = new SigecovContext())
                {
                    int _codigoProduto = Convert.ToInt32(txtCodigo.Text);
                    int _codigoCliente = Convert.ToInt32(txtCodigoCliente.Text);
                    produtoSelecionado = DB.Produtos.Find(_codigoProduto);
                    cliente = DB.Clientes.Find(_codigoCliente);
                    cidade = DB.Cidades.Find(cliente.cidId);
                    estado = DB.Estados.Find(cidade.estId);

                    _transportadoras.Clear();
                    var taxas = DB.Transportadoras.Where(t => t.Cidade.Estado.estRegiao == cliente.Cidade.Estado.estRegiao).ToList();
                    foreach (var item in taxas)
                        _transportadoras.Add(item.traNome, Convert.ToSingle(item.traPrecoKg));





                }

                _quantidade = Convert.ToDecimal(txtQuantidade.Text);
                _valorUnitario = Convert.ToDecimal(txtValorUnitario.Text);
                _desconto = Convert.ToDecimal(txtDesconto.Text);
                _valorTotalItem = decimal.Multiply(_quantidade, _valorUnitario);

                _percentualDesconto = (_valorTotalItem * _desconto) / 100;
                _valorTotalItem = _valorTotalItem - _percentualDesconto;
                string[] row = new string[] { txtCodigo.Text, txtDescricao.Text, produtoSelecionado.proPeso.ToString(), txtQuantidade.Text, txtValorUnitario.Text, txtDesconto.Text, Convert.ToString(_valorTotalItem) };
                dgvPedido.Rows.Add(row);

                _pesoTotalPedido = Pedido.CalcularPeso(dgvPedido);

                float totalFinal = 0;
                txtTotalPedido.Text = "R$ " + Pedido.CalcularPedido(dgvPedido);
                _precoKg = Convert.ToSingle(cbxTransportadoras.SelectedValue);
                _totalFrete = _precoKg * Pedido.CalcularPeso(dgvPedido);
                txtTotalFrete.Text = Convert.ToString(_totalFrete);
                totalFinal = _totalFrete + Convert.ToSingle(Pedido.CalcularPedido(dgvPedido));
                txtTotalFinal.Text = totalFinal.ToString();


                this.LimparPedido();
            }
            else
            {
                MessageBox.Show("Preencha os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCodigoCliente.Focus();
            }
        }

        private void txtCodigoCliente_Leave(object sender, EventArgs e)
        {
            if (!(string.IsNullOrWhiteSpace(txtCodigoCliente.Text)))
            {
                int _codigoCliente = Convert.ToInt32(txtCodigoCliente.Text);
                using (SigecovContext DB = new SigecovContext())
                {
                    cliente = DB.Clientes.Find(_codigoCliente);
                    if (cliente != null)
                        txtNomeCliente.Text = cliente.cliEmpresa;
                    else
                    {
                        MessageBox.Show("Cliente não encontrado!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtNomeCliente.Clear();
                        txtCodigoCliente.Clear();
                        txtCodigoCliente.Focus();
                    }
                }
            }
        }

        private void txtCodigo_Leave(object sender, EventArgs e)
        {
            if (!(string.IsNullOrWhiteSpace(txtCodigo.Text)))
            {
                int _codigoProduto = Convert.ToInt32(txtCodigo.Text);
                using (SigecovContext DB = new SigecovContext())
                {
                    produto = DB.Produtos.Find(_codigoProduto);
                    if (produto != null)
                        txtDescricao.Text = produto.proNome;
                    else
                    {
                        MessageBox.Show("Produto não encontrado!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtDescricao.Clear();
                        txtCodigo.Clear();
                        txtCodigo.Focus();
                    }
                }
            }
        }

        private void cbxTransportadoras_SelectedIndexChanged(object sender, EventArgs e)
        {
            //if (cbxTransportadoras.SelectedValue.ToString()!=null)
               //  lblPrecoKg.Text = cbxTransportadoras.SelectedValue.ToString();
            if (dgvPedido.RowCount > 0)
            {
                float totalFinal = 0;
                txtTotalPedido.Text = "R$ " + Pedido.CalcularPedido(dgvPedido);
                _precoKg = Convert.ToSingle(cbxTransportadoras.SelectedValue);
                _totalFrete = _precoKg * Pedido.CalcularPeso(dgvPedido);
                txtTotalFrete.Text = Convert.ToString(_totalFrete);
                totalFinal = _totalFrete + Convert.ToSingle(Pedido.CalcularPedido(dgvPedido));
                txtTotalFinal.Text = totalFinal.ToString();
            }
        }

        private void btnPesquisarProduto_Click(object sender, EventArgs e)
        {
            List<object> listaProduto = new List<object>();
            using (SigecovContext DB = new SigecovContext())
            {
                listaProduto = DB.Produtos.Select(p => new { p.proId, p.proNome }).ToList<object>();
                Form pesquisa = Ferramenta.GerarFormularioPesquisa(listaProduto);
                pesquisa.ShowDialog();
                txtDescricao.Text = _valorPesquisa;
                txtCodigo.Text = _codigoPesquisa;
            }
        }

        private void btnPesquisarCliente_Click(object sender, EventArgs e)
        {
            List<object> listaCliente = new List<object>();
            using (SigecovContext DB = new SigecovContext())
            {
                listaCliente = DB.Clientes.Select(c => new { c.cliId, c.cliEmpresa }).ToList<object>();
                Form pesquisa = Ferramenta.GerarFormularioPesquisa(listaCliente);
                pesquisa.ShowDialog();
                txtNomeCliente.Text = _valorPesquisa;
                txtCodigoCliente.Text = _codigoPesquisa;
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void txtCodigoCliente_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void txtQuantidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void txtValorUnitario_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.ValorMonetario(e);
        }

        private void txtDesconto_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }
    }
}
